using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Justificativa;
using System;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Calendario;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Cliente;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.Movimento.ControleMovimentoOrdens;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication
{

    /// <summary>
    /// Modelo da entidade de ControleMovimentoOrdens Da Ordem
    /// </summary>
    public class ControleMovimentoOrdens : BaseCommunication
    {

        public ControleMovimentoOrdens(SessionInformation sessionInformation)
            : base(sessionInformation)
        {
        } 

		/// <summary>
        /// ObterInformacoesMovimento
		/// </summary>
		/// <param name="request"></param>
		/// <returns></returns>
		public Model.InformacoesMovimento ObterInformacoesMovimento(Model.DataMovimento model)
        {
            Model.InformacoesMovimento retorno = null;
            IControleMovimentoOrdens servico = null;
            try
            {
                using (ServiceInstance<IControleMovimentoOrdens> service = new ServiceInstance<IControleMovimentoOrdens>())
                {
                    servico = service.TryGetInstance(this.Session);

                    DataMovimentoRequest request =
                        new Translator.ModelToDataContract.ControleMovimentoOrdens().ToDataMovimentoRequest(model);

                    retorno = new Translator.DataContractToModel.ControleMovimentoOrdens().ToInformacoesMovimento(
                    servico.ObterInformacoesMovimento(request));
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return retorno;
		}
	}
}